home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
MATH
/
VLN_20
/
UTILS1.INC
< prev
next >
Wrap
Text File
|
1995-03-30
|
4KB
|
164 lines
{)))))))))))))))))))))}
{} function MaxOfW {} (a,b : word) : word;
{)))))))))))))))))))))}
begin
if a>b then MaxOfW := a else MaxOfW := b;
end;
{)))))))))))))))))))))))))))))))))))))}
{} procedure tVryLrgNo.Recount; {}
{)))))))))))))))))))))))))))))))))))))}
{test if fewer words are needed }
var i : integer;
begin
i := count;
while i > 0 do begin
if tVLN[i] = 0 then
dec(count)
else break;
dec(i);
end;
end;
{))))))))))))))))))))))))))))))}
{} constructor tVryLrgNo.Init {} ( cnt, maxC, sgn :integer;
{))))))))))))))))))))))))))))))} pnew :pWordArray);
begin
max := maxC;
SetVal( cnt, sgn, pnew );
end;
{))))))))))))))))))))))))))}
{} procedure HexWord {} ( w : word; var pS : pchar4);
{))))))))))))))))))))))))))}
const hexlist : array[0..15] of char =
'0123456789ABCDEF';
var
i : integer;
begin
for i := 3 downto 0 do begin
ps[i] := hexlist[w and $F];
w := w shr 4;
end;
ps[4] := #0;
end;
{(((((((((((((((((((((((((((((((((}
procedure CallError(S:String);
begin
MessageBox(0, 'Too Big Error', 'VLN Error', 0);
halt;
end;
{(((((((((((((((((((((((((((((((((}
procedure OpenTempRegs;
var memSz, i : integer;
begin
memSz := wksize*2+6;
for i := 0 to 99 do
getmem(vlnVars[i],memsz);
end;
{(((((((((((((((((((((((((((((((((}
procedure CloseTempRegs;
var memsz, i : integer;
begin
memSz := wksize*2+6;
for i := 0 to 99 do
freemem(vlnVars[i],memsz);
freemem(dec_10e9, 10);
freemem(decPointShift, 22);
end;
{(((((((((((((((((((((((((((((((((}
function Compare( Reg1, op, Reg2 : integer ): boolean;
begin
case op of
1: Compare := IsGrEqAbs( vlnVars[ Reg1],vlnVars[ Reg2] );
2: Compare := IsEqAbs( vlnVars[ Reg1],vlnVars[ Reg2] );
end;
end;
{(((((((((((((((((((((((((((((((((}
procedure Op_2Self( Reg1, op : integer);
begin
case op of
1: vlnVars[ Reg1]^.Shr1Bit;
2: vlnVars[ Reg1]^.ShL1Bit;
end;
end;
{(((((((((((((((((((((((((((((((((}
procedure Register_op( Reg1, op, Reg2 : integer);
begin
case op of
1: vlnVars[ Reg1]^.AddBy( vlnVars[ Reg2]);
2: vlnVars[ Reg1]^.SubBy( vlnVars[ Reg2]);
3: vlnVars[ Reg1]^.MulBy( vlnVars[ Reg2]);
4: vlnVars[ Reg1]^.DivBy( vlnVars[ Reg2], vlnVars[92] );
5: vlnVars[ Reg1]^.Copy ( vlnVars[ Reg2] );
6: begin
FastDiv ( Reg1, Reg2 );
end;
end;
end;
{(((((((((((((((((((((((((((((((((}
procedure Number_op( Reg1, op, aNum : integer);
begin
case op of
1: vlnVars[ Reg1]^.AddN(aNum);
2: vlnVars[ Reg1]^.SubN(aNum);
3: vlnVars[ Reg1]^.MulN(aNum);
4: vlnVars[ Reg1]^.DivN(aNum);
5: vlnVars[ Reg1]^.SetSmall(aNum);
6: vlnVars[ Reg1]^.BigSHL(aNum);
7: vlnVars[ Reg1]^.MultiSHL(aNum);
8: vlnVars[ Reg1]^.TwoNth(aNum);
9: vlnVars[ Reg1]^.TenNth(aNum);
10: vlnVars[ Reg1]^.NthRoot(aNum);
11: vlnVars[ Reg1]^.NthPower(aNum);
12: vlnVars[ Reg1]^.TwosComplAbs(aNum);
13: vlnVars[ Reg1]^.SetRandom(aNum);
14: vlnVars[ Reg1]^.FastNthPower(aNum);
end;
end;
{(((((((((((((((((((((((((((((((((}
function DivByBillion( regNo : integer ) : longint;
var r : integer;
t : longint;
begin
if regNo <> 99 then
vlnVars[99]^.Copy(vlnVars[regNo]);
vlnVars[99]^.DivBy(dec_10e9,vlnVars[92]);
r := vlnVars[92]^.count;
case r of
2: begin
t := vlnVars[92]^.tvln[2];
t := t shl 16 + vlnVars[92]^.tvln[1];
end;
1: t := vlnVars[92]^.tvln[1];
0: t := 0;
end;
DivByBillion := t;
end;